<?php
require_once("config.php");
require_once("utils.php");
require_once(ROOT_DIR_CLASES.'/cCliente.php');
require_once(ROOT_DIR_CLASES.'/posiMovil.php');
require_once(ROOT_DIR_CLASES.'/ChatMessage.php');
require_once 'JSON.php';

class QueryPosiMoviles
{
	private $args = null;


	function __construct($args)
	{
		$this->args = $args;
	}

	function Execute()
	{
		$result = array();
		$posiciones = BykomCliente::Consulta_PosicionActual_Avl($this->args['cuentas']);

		$zonaAdmin = BykomCliente::getHoursFromZoneGMT("adminconfig","");
		for ($i=0; $i<$posiciones->Cantidad(); $i++) {
			$posiMovil 				= new posiMovil();
			$posiMovil->tienePosicionActual = 1;
			$posiMovil->id 			= $posiciones->campo('idMovil',$i);
			$posiMovil->longitud 	= quitCero($posiciones->campo('longitud',$i));
			$posiMovil->latitud 	= quitCero($posiciones->campo('latitud',$i));
   			$posiMovil->velocidad 	= $posiciones->campo('velocidad',$i);
        	$posiMovil->sentido 	= $posiciones->campo('sentido',$i);
        	$posiMovil->sentidoPalabra = BykomCliente::Obtener_Palabra_Sentido($posiMovil->sentido);
        	$posiMovil->satelites 	= $posiciones->campo('satelites',$i);
        	$posiMovil->direccionAbrev = trim(BykomCliente::Obtener_Direccion_Abreviada($posiciones->campo('direccion',$i)));
        	$posiMovil->evento 		= $posiciones->campo('evento',$i);
        	$posiMovil->eventoDetalle	= utf8_encode($posiciones->campo('eventoDetalle',$i));
        	$posiMovil->validez 	= BykomCliente::Obtener_Palabra_Validez($posiciones->campo('validez',$i));
        	$posiMovil->fechaMensaje= $posiciones->campo('fechaMensaje',$i);
        	//$posiMovil->statusZona 	= $posiciones->campo('statusZona',$i);
        	//$posiMovil->setZonaProhibida($posiciones->campo('zonaProhibida',$i));
			$posiMovil->odometroParcial	= $posiciones->campo('odometroParcial',$i);
			$posiMovil->odometroTotal 	= $posiciones->campo('odometroTotal',$i);
			$posiMovil->rpm 		= $posiciones->campo('rpm',$i);
			$posiMovil->edadMensaje = $posiciones->campo('validez',$i);
			$zonaHorariaMovil 		= 	$posiciones->campo('zonaHorariaId',$i);
			$horasMovil 			= 	$posiciones->campo('horas',$i);
			$signoHorasMovil 		= 	$posiciones->campo('signoHoras',$i);
			/*$signoHorasMovil= 1;
			$zonaHorariaMovil = 3;
			$horasMovil = 158;*/
			$posiMovil->zonaHorariaId = ($zonaHorariaMovil == NULL) ? "" : $zonaHorariaMovil;
			$posiMovil->zonaHorariaLabel = BykomCliente::getLabelZonaHoraria($horasMovil, $signoHorasMovil);

			$fechaServidor 	= strtotime("now");//devuelve en segundos la hora actual del servidor
		   	$res = 0;
		   	if( $zonaHorariaMovil!=null && $zonaAdmin->cantidad()!=0 && $zonaHorariaMovil != $zonaAdmin->campo("timeZone",0) ){
		   		switch($signoHorasMovil){
		   			case 1: $horaMovil = $horasMovil; break;
		   			case 2: $horaMovil = (-1)*$horasMovil; break;
		   		}
		   		switch($zonaAdmin->campo("tipo",0)){
		   			case 1: $horaAdmin = $zonaAdmin->campo("horas",0); break;
		   			case 2: $horaAdmin = (-1)*$zonaAdmin->campo("horas",0); break;
		   		}
		   		$res = $horaAdmin - ($horaMovil);
		   		$res = $res * 60;
		   	}
			$fechaMensaje 	= dateToMYSQL($posiMovil->fechaMensaje,true);

			$fechaMensaje 	= strtotime($fechaMensaje)-$res;
			$dif  			= $fechaServidor-$fechaMensaje;
			$posiMovil->tiempoMensaje = $dif;
			$posiMovil->digitales 	= BykomCliente::parsearSensoresDigitales($posiciones->campo('digitales',$i));

			//$posiMovil->digitales = 'X1100111110';// $posiciones->campo('digitales',$i);
			//$posiMovil->digitales = 'X0000000010'; // todo ok
			//$posiMovil->digitales = 'X1111111101'; //todo mal
			$bateriaPrincipal = $posiciones->campo('bateriaPrincipal',$i);
			if ($bateriaPrincipal == NULL || trim($bateriaPrincipal) == '') {
				$posiMovil->bateriaPrincipal = NULL;//"Desconocido";
			} else {
				$posiMovil->bateriaPrincipal = $bateriaPrincipal;
			}
			$bateriaSecundaria = $posiciones->campo('bateriaSecundaria',$i);
			if ($bateriaSecundaria == NULL || trim($bateriaSecundaria) == '') {
				$posiMovil->bateriaSecundaria = NULL;//"Desconocido";
			} else {
				$posiMovil->bateriaSecundaria = $bateriaSecundaria;
			}
			$posiMovil->alimentacion = $posiciones->campo('alimentacion',$i);
			$posiMovil->contactoMotor = $posiciones->campo('contacto',$i);

			$controla = $posiciones->campo('controlaCaudalimetro',$i);
			if($controla != 0) {
        		//$consultaCaudalimetro = BykomCliente::Obtener_Ultima_Medicion_Caudalimetro($posiMovil->id);
        		$consulta = BykomCliente::Obtener_Ultima_Medicion_Analogica($posiMovil->id, 3, "VALOR2");
        		if ($consulta->cantidad() > 0) {
          			$posiMovil->consumoActual = $consulta->campo('medicion',0)/1;// / 10;//15.2;//$posiciones->campo('consumoActual',$i);
          			$posiMovil->consumoActualFecha = $consulta->campo('fechaMedicion',0);//"10/07/2001 32:32:32";//$posiciones->campo('consumoActualFecha',$i);
        		}
      		}

      		$controla = $posiciones->campo('controlaTanqueNafta',$i);
			if ($controla != 0) {
        		$consulta = BykomCliente::Obtener_Ultima_Medicion_Analogica($posiMovil->id, 4, "VALOR1");
        		if ($consulta->cantidad() > 0) {
          			$posiMovil->porcentajeTanque = $consulta->campo('medicion',0)/1;//15.2;//$posiciones->campo('consumoActual',$i);
          			$posiMovil->porcentajeTanqueFecha = $consulta->campo('fechaMedicion',0);//"10/07/2001 32:32:32";//$posiciones->campo('consumoActualFecha',$i);
        		}
      		}

      		$controla = $posiciones->campo('controlaTemperaturaMotor',$i);
			if ($controla != 0) {
        		$consulta = BykomCliente::Obtener_Ultima_Medicion_Analogica($posiMovil->id, 15, "VALOR1");
        		if ($consulta->cantidad() > 0) {
          			$posiMovil->temperaturaMotor = $consulta->campo('medicion',0)/1;//15.2;//$posiciones->campo('consumoActual',$i);
          			$posiMovil->temperaturaMotorFecha = $consulta->campo('fechaMedicion',0);//"10/07/2001 32:32:32";//$posiciones->campo('consumoActualFecha',$i);
        		}
      		}

      		$controla = $posiciones->campo('controlaTemperaturaCarga',$i);
			if ($controla != 0) {
        		$consulta = BykomCliente::Obtener_Ultima_Medicion_Analogica($posiMovil->id, 16, "VALOR1");
        		if ($consulta->cantidad() > 0) {
          			$posiMovil->temperaturaCarga = $consulta->campo('medicion',0)/1;//15.2;//$posiciones->campo('consumoActual',$i);
          			$posiMovil->temperaturaCargaFecha = $consulta->campo('fechaMedicion',0);//"10/07/2001 32:32:32";//$posiciones->campo('consumoActualFecha',$i);
        		}
      		}
       		array_push($result, $posiMovil);
		}

		//si existe tambien el parametro 'TABLAID' agrego la cantidad de mensajes sin leer.
		if (array_key_exists('TABLAID', $this->args)){
			$tablaId = $this->args['TABLAID'];
			$objetivo = $this->args['OBJETIVO'];
			$mensajes = BykomCliente::Consultar_Mensajes($tablaId, $objetivo);
			$countMensajes = $mensajes->cantidad();
			array_push($result, $countMensajes);
		}

		return $result;
	}
}
?>